home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-07-11 | 26.9 KB | 949 lines | [TEXT/nX^n] |
- Listing 1: TEDemo.h (header file)
-
- class TTEApplication : public TApplication {
- public:
- virtual pascal void
- ITEApplication(OSType itsMainFileType);
- virtual pascal struct TDocument
- *DoMakeDocument(CmdNumber itsCmdNumber);
- virtual pascal struct TCommand
- *DoMenuCommand(CmdNumber aCmdNumber);
- virtual pascal void PoseModalDialog();
- #ifdef qDebug
- virtual pascal void IdentifySoftware();
- #endif
- };
-
- class TTEDocument;
-
- class TPaletteView : public TView {
-
- public:
- int fIconSelected;
- virtual pascal void
- IPaletteView(TTEDocument *itsTEDocument);
- virtual pascal struct TCommand
- *DoMouseCommand(Point *theMouse,
- EventInfo *info, Point *hysteresis);
- pascal void DoHighlightSelection
- (HLState fromHL, HLState toHL);
- pascal void Draw(Rect *area);
- #ifdef qDebug
- virtual pascal void Fields(pascal void (*DoToField)
- (StringPtr fieldName, Ptr fieldAddr,
- short fieldType, void *link), void *link);
- #endif
- };
-
- class TBox : public TObject {
- public:
- Rect fLocation;
- pascal void IBox(Rect *itsLocation);
- pascal void DrawShape();
- pascal void NeedDiskSpace(long *data);
- pascal void Read(short aRefNum);
- pascal void Write(short aRefNum);
- #ifdef qDebug
- virtual pascal void Fields(pascal void (*DoToField)
- (StringPtr fieldName, Ptr fieldAddr,
- short fieldType, void *link), void *link);
- #endif
- };
-
- class TTextView : public TTEView {
-
- public:
- TTEDocument *fTEDocument;
- TPaletteView *fPaletteView;
- Boolean fUpdated;
- pascal void
- ITextView(TTEDocument *itsTEDocument);
- pascal Boolean DoIdle(IdlePhase phase);
- pascal struct TCommand *DoKeyCommand(short ch,
- short aKeyCode, EventInfo *info);
- pascal struct TCommand
- *DoMenuCommand(CmdNumber aCmdNumber);
- pascal void DoSetupMenus ();
- pascal struct TCommand
- *DoMouseCommand(Point *theMouse,
- EventInfo *info, Point *hysteresis);
- pascal Boolean DoSetCursor
- (Point localPoint, RgnHandle cursorRgn);
- pascal void Draw(Rect *area);
- #ifdef qDebug
- virtual pascal void Fields(pascal void (*DoToField)
- (StringPtr fieldName, Ptr fieldAddr,
- short fieldType, void *link), void *link);
- #endif
- };
-
- class TColorCmd : public TCommand {
-
- public:
- TTEDocument *fTEDocument;
- TTextView *fTextView;
- int fOldColorCmd, fNewColorCmd;
- pascal void IColorCmd (int aCmdNumber,
- TTEDocument *itsDocument,TTextView *itsView);
- pascal void DoIt();
- pascal void RedoIt();
- pascal void UndoIt();
- #ifdef qDebug
- virtual pascal void Fields(pascal void (*DoToField)
- (StringPtr fieldName, Ptr fieldAddr,
- short fieldType, void *link), void *link);
- #endif
- };
-
- class TSketcher : public TCommand {
-
- public:
- TTEDocument *fTEDocument;
- TTextView *fTextView;
- TBox *fBox; // the object being sketched
- Rect fBoxLocation; // size of the Box being sketched
- pascal void ISketcher
- (TTEDocument *itsDocument, TTextView *itsView);
- pascal struct TCommand *TrackMouse
- (TrackPhase aTrackPhase, VPoint *anchorPoint,
- VPoint *previousPoint, VPoint *nextPoint,
- Boolean mouseDidMove);
- pascal void DoIt();
- pascal void RedoIt();
- pascal void UndoIt();
- #ifdef qDebug
- virtual pascal void Fields(pascal void (*DoToField)
- (StringPtr fieldName, Ptr fieldAddr,
- short fieldType, void *link), void *link);
- #endif
- };
-
- class TTEDocument : public TDocument {
- public:
- TPaletteView *fPaletteView;
- TTextView *fTextView;
- Handle fTextHdl; // text typed by user
- int fTextColorCmd; // menu command number
- TList *fShapeList; // list of Shapes to be drawn
- pascal void ITEDocument();
- pascal void AddShape(TBox *aBox);
- pascal void DeleteShape();
- pascal void DoMakeWindows();
- pascal void DoMakeViews(Boolean forPrinting);
- pascal void DoNeedDiskSpace
- (long *dataForkBytes, long *rsrcForkBytes);
- pascal void DoRead(short aRefNum,
- Boolean rsrcExists, Boolean forPrinting);
- pascal void DoWrite(short aRefNum,
- Boolean makingCopy);
- pascal void ForEachShapeDo
- (pascal void (*DoToItem) (TObject *item, void
- *DoToItem_Staticlink),void *DoToItem_Staticlink);
- pascal void Free();
- pascal void SetTextColorCmd(int theColorCmd);
- pascal int TextColorCmd();
- #ifdef qDebug
- virtual pascal void Fields(pascal void (*DoToField)
- (StringPtr fieldName, Ptr fieldAddr,
- short fieldType, void *link), void *link);
- #endif
- };
-
- // --- global definitions ---
-
- typedef pascal void (*DoToObject)
- (TObject *aObject, void *DoToObject_staticlink);
- struct CalcDiskSpaceStruct { long myDataForkBytes; };
- struct DoToRectStruct { int myRefNum; };
-
- //
- // --- end of declarations ---
- //
-
- Listing 2: TEDemo.cp (implementation)
-
- #include <UMacApp.h>
- #include <UPrinting.h>
- #include <UTEView.h>
- #include <Fonts.h>
- #include <ToolUtils.h>
-
- #include "TEDemo.h"
-
- const OSType kSignature = 'JLMT';
- const OSType kFileType = 'JL01';
- const int kWindID = 1001;
- const int kHelpID = 1001; // Help DLOG ID
- const int kPaletteWidth = 640;
- const int kPaletteHeight = 32;
- const int kIconWidth = 32;
- const int kBoxIconID = 256;
- const int kTextIconID = 257;
- const int kBox = 1;
- const int kText = 2;
- const int kPaletteColor = greenColor;
- const int kBoxColor = redColor;
-
- // commands
- const int cHelp = 1001; // for color menu items
- const int cDrawBox = 2001;
- // command number for Box sketcher object
-
- const int cBlack = 5001; // for TextColor menu
- const int cBlue = 5002;
- const int cGreen = 5003;
- const int cRed = 5004;
- const int cWhite = 5005;
-
- int gColorArray[cWhite-cBlack+1];
- Rect gIconRect[kText-kBox+1];
-
- pascal void TTEApplication::ITEApplication
- (OSType itsMainFileType)
- { gColorArray[cBlack-cBlack] = blackColor;
- gColorArray[cBlue-cBlack] = blueColor;
- gColorArray[cGreen-cBlack] = greenColor;
- gColorArray[cRed-cBlack] = redColor;
- gColorArray[cWhite-cBlack] = whiteColor;
- SetRect(&gIconRect[kBox-kBox],
- 0, 0, kIconWidth, kIconWidth);
- SetRect(&gIconRect[kText-kBox], kIconWidth,
- 0, 2 * kIconWidth, kIconWidth);
- IApplication(itsMainFileType);
- RegisterStdType("\pTTextView", 'text');
- if (gDeadStripSuppression)
- { TTextView *aTextView;
- aTextView = new TTextView; }
- InitPrinting();
- }
-
- pascal struct TDocument
- *TTEApplication::DoMakeDocument
- (CmdNumber itsCmdNumber)
- { TTEDocument* aTEDocument;
- aTEDocument = new TTEDocument;
- FailNIL(aTEDocument);
- aTEDocument->ITEDocument();
- return aTEDocument; }
-
- pascal void TTEApplication::PoseModalDialog()
- { DialogPtr dPtr;
- short dItem;
- dPtr = GetNewDialog(kHelpID, nil, (WindowPtr) -1);
- ModalDialog(nil, &dItem);
- DisposDialog(dPtr); }
-
-
- pascal struct TCommand
- *TTEApplication::DoMenuCommand
- (CmdNumber aCmdNumber)
- { switch (aCmdNumber) {
- case cHelp:
- PoseModalDialog();
- return gNoChanges;
- default:
- return inherited::DoMenuCommand(aCmdNumber); }
- }
-
- #ifdef qDebug
- pascal void TTEApplication::IdentifySoftware()
- { ProgramReport
- ("\pTEDemo ©J.Langowski/MacTutor June 1990",false);
- inherited::IdentifySoftware(); }
- #endif
-
- // ---- Document ----
-
- pascal void TTEDocument::ITEDocument()
- { TList *aList;
- IDocument(kFileType, kSignature, kUsesDataFork,
- !kUsesRsrcFork, !kDataOpen, !kRsrcOpen);
- fSavePrintInfo = true; // save print info in data fork
- fTextHdl = NewPermHandle(0); // heap block for text
- FailNIL(fTextHdl);
- fTextColorCmd = cBlack;
- aList = NewList(); // make empty list of Boxs
- fShapeList = aList; }
-
- pascal void TTEDocument::AddShape(TBox *aBox)
- { fShapeList->InsertFirst(aBox); }
-
- pascal void TTEDocument::DeleteShape()
- { fShapeList->Delete(fShapeList->First()); }
-
- pascal void TTEDocument::DoMakeViews
- (Boolean forPrinting)
- { const Boolean kSquareDots = true;
- const Boolean kFixedSize = true;
- TPaletteView *aPaletteView;
- TTextView *aTextView;
- TStdPrintHandler *aStdHandler;
- aPaletteView = new TPaletteView;
- FailNIL(aPaletteView);
- aPaletteView->IPaletteView(this);
- fPaletteView = aPaletteView;
- // save reference to palette in document
- aTextView = new TTextView;
- FailNIL(aTextView);
- aTextView->ITextView(this);
- fTextView = aTextView;
- // save reference to text view in document
- fTextView->StuffText(fTextHdl); // so view uses the same characters
- aStdHandler = new TStdPrintHandler;
- // make text view printable
- FailNIL(aStdHandler);
- aStdHandler->IStdPrintHandler (this, aTextView,
- !kSquareDots, kFixedSize, !kFixedSize); }
-
- pascal void TTEDocument::DoMakeWindows()
- { TWindow *aWindow;
- aWindow = NewPaletteWindow(kWindID,
- kWantHScrollBar, kWantVScrollBar, this,
- fTextView, fPaletteView, kPaletteHeight,
- kTopPalette); aWindow->AdaptToScreen();
- // adjust for various size monitors
- aWindow->SimpleStagger(kStdStaggerAmount,
- kStdStaggerAmount, &gStdStaggerCount); }
-
- pascal void CalcDiskSpace(TBox *aBox,
- CalcDiskSpaceStruct *aCalcDiskSpaceStruct)
- { aBox->NeedDiskSpace
- (&(aCalcDiskSpaceStruct->myDataForkBytes)); }
-
- pascal void TTEDocument::DoNeedDiskSpace
- (long *dataForkBytes, long *rsrcForkBytes)
- { long textBytes, numberOfShapesBytes,
- cmdNumberBytes;
- CalcDiskSpaceStruct aCalcDiskSpaceStruct;
- /* file format:
- TextCmd Number (integer)
- # shapes (integer)
- data for shape #1
- data for shape #2
- etc.
- text */
- inherited::DoNeedDiskSpace (dataForkBytes,
- rsrcForkBytes);
- aCalcDiskSpaceStruct.myDataForkBytes =
- *dataForkBytes;
- cmdNumberBytes = sizeof(int);
- numberOfShapesBytes = sizeof(fTextColorCmd);
- ForEachShapeDo((DoToObject)CalcDiskSpace,
- &aCalcDiskSpaceStruct);
- textBytes = GetHandleSize(fTextHdl);
- *dataForkBytes = cmdNumberBytes +
- numberOfShapesBytes +
- aCalcDiskSpaceStruct.myDataForkBytes +
- textBytes; }
-
- pascal void TTEDocument::DoRead(short aRefNum,
- Boolean rsrcExists, Boolean forPrinting)
- { long textColorCmdNumberBytes;
- int textColorCmdNumber;
- long numberOfShapesBytes;
- int numberOfShapes;
- TBox *aBox;
- long eof, fPos, textBytes;
-
- /* file format see above */
- inherited::DoRead(aRefNum, rsrcExists, forPrinting);
- // print info from disk
- textColorCmdNumberBytes =
- sizeof(textColorCmdNumber); // read text color
- FailOSErr(
- FSRead(aRefNum, &textColorCmdNumberBytes,
- (Ptr) &textColorCmdNumber));
- fTextColorCmd = textColorCmdNumber;
- numberOfShapesBytes = sizeof(numberOfShapes);
- // read # items
- FailOSErr(
- FSRead(aRefNum, &numberOfShapesBytes,
- (Ptr) &numberOfShapes));
- for (int i = 1; i <= numberOfShapes; i++)
- { aBox = new TBox; FailNIL(aBox); // make new Box
- aBox->Read(aRefNum); // read & initialize object
- AddShape(aBox); }; // add to list in doc
-
- FailOSErr(GetFPos(aRefNum, &fPos));
- // get size of text in file
- FailOSErr(GetEOF(aRefNum, &eof));
- // get size of data in file
- textBytes = eof - fPos;
- SetHandleSize(fTextHdl, textBytes);
- HLock (fTextHdl);
- FailOSErr(FSRead(aRefNum, &textBytes, *fTextHdl)); HUnlock (fTextHdl); }
-
- pascal void DoToRect
- (TBox *aBox, DoToRectStruct *aDoToRectStruct)
- { aBox->Write(aDoToRectStruct->myRefNum); }
-
- pascal void TTEDocument::DoWrite
- (short aRefNum, Boolean makingCopy)
- { long textColorCmdNumberBytes;
- int textColorCmdNumber;
- long numberOfShapesBytes;
- int numberOfShapes;
- long textBytes;
- DoToRectStruct aDoToRectStruct;
-
- /* file format see above */
-
- inherited::DoWrite(aRefNum, makingCopy);
- // print info to disk
- textColorCmdNumber = fTextColorCmd;
- // write text color to disk
- textColorCmdNumberBytes =
- sizeof(textColorCmdNumber);
- FailOSErr(
- FSWrite(aRefNum, &textColorCmdNumberBytes,
- (Ptr) &textColorCmdNumber));
-
- numberOfShapes = fShapeList->fSize;
- // write # items to disk
- numberOfShapesBytes = sizeof(numberOfShapes);
- FailOSErr(
- FSWrite(aRefNum, &numberOfShapesBytes,
- (Ptr) &numberOfShapes));
- aDoToRectStruct.myRefNum = aRefNum;
- ForEachShapeDo((DoToObject)DoToRect,
- &aDoToRectStruct); // write each rect to disk
- textBytes = GetHandleSize(fTextHdl);
- HLock (fTextHdl);
- FailOSErr(FSWrite(aRefNum, &textBytes, *fTextHdl));
- // write the text
- HUnlock (fTextHdl); }
-
- pascal void TTEDocument::ForEachShapeDo
- (pascal void (*DoToItem)(TObject *item,
- void *DoToItem_Staticlink),void *DoToItem_Staticlink)
- { fShapeList->Each(DoToItem,DoToItem_Staticlink); }
-
- pascal void DisposeRect(TBox *aBox, void *link)
- { aBox->Free(); }
-
- pascal void TTEDocument::Free()
- { void *link;
- if (fTextHdl != nil) DisposHandle(fTextHdl);
- // dispose of ASCII characters
- ForEachShapeDo((DoToObject)DisposeRect,link);
- // dispose of Box objects
- fShapeList->Free(); // dispose of List object
- inherited::Free(); } // dispose of document object
-
- #ifdef qDebug
- pascal void TTEDocument::Fields
- (pascal void (*DoToField) (StringPtr fieldName,
- Ptr fieldAddr, short fieldType, void *link), void *link)
- { DoToField("\pTTEDocument", nil, bClass, link);
- DoToField("\pfPaletteView", (Ptr) &fPaletteView,
- bObject, link);
- DoToField("\pfTextView", (Ptr) &fTextView, bObject, link);
- DoToField("\pfTextHdl", (Ptr) &fTextHdl, bHandle, link);
- DoToField("\pfTextColorCmd", (Ptr) &fTextColorCmd,
- bInteger, link);
- DoToField("\pfShapeList", (Ptr) &fShapeList,
- bObject, link);
- inherited::Fields(DoToField, link); }
- #endif
-
- pascal void
- TTEDocument::SetTextColorCmd(int theColorCmd)
- { fTextColorCmd = theColorCmd; }
-
- pascal int TTEDocument::TextColorCmd()
- { return fTextColorCmd; }
-
- //
- // ---- TPaletteView ----
- //
-
- pascal void TPaletteView::IPaletteView
- (TTEDocument *itsTEDocument)
- { VPoint itsSize;
- SetVPt(&itsSize, kPaletteWidth, kPaletteHeight);
- IView(itsTEDocument, nil, &gZeroVPt, &itsSize,
- sizeFixed, sizeFixed);
- fIconSelected = kText-kBox; }
-
- pascal void TPaletteView::Draw(Rect *area)
- { Rect aFrame; Point aPenSize;
- Handle aHandle;
- ForeColor(kPaletteColor);
- aHandle = GetIcon(kBoxIconID);
- FailNILResource(aHandle);
- PlotIcon(&gIconRect[kBox-kBox], aHandle);
- aHandle = GetIcon(kTextIconID);
- FailNILResource(aHandle);
- PlotIcon(&gIconRect[kText-kBox], aHandle);
- ForeColor(blackColor);
- GetQDExtent(&aFrame);
- SetPt(&aPenSize, 1, 1);
- Adorn(&aFrame, aPenSize, adnLineBottom); }
-
- pascal void TPaletteView::DoHighlightSelection
- (HLState fromHL, HLState toHL)
- { Rect aRect;
- aRect = gIconRect[fIconSelected];
- InsetRect(&aRect, 1, 1);
- SetHLPenState(fromHL, toHL);
- PaintRect(&aRect);}
-
- pascal struct TCommand
- *TPaletteView::DoMouseCommand(Point *theMouse,
- EventInfo *info, Point *hysteresis)
- { int index;
- index = int(theMouse->h / kIconWidth);
-
- if ((index < 2) && (index != fIconSelected))
- { if (Focus()) { DoHighlightSelection(hlOn, hlOff); };
- fIconSelected = index;
- if (Focus()) { DoHighlightSelection(hlOff, hlOn); };
- };
- return gNoChanges; }
-
- #ifdef qDebug
- pascal void TPaletteView::Fields
- (pascal void (*DoToField) (StringPtr fieldName,
- Ptr fieldAddr, short fieldType, void *link), void *link)
- { DoToField("\pTPaletteView", nil, bClass, link);
- DoToField("\pfIconSelected", (Ptr) &fIconSelected,
- bInteger, link);
- inherited::Fields(DoToField, link); }
- #endif
-
- pascal void
- TTextView::ITextView(TTEDocument *itsTEDocument)
- { VPoint itsSize; Rect itsInset;
- TextStyle aStyle;
- SetVPt(&itsSize, 100, 100);
- SetRect(&itsInset, 10, 8, 10, 0);
- SetTextStyle
- (&aStyle, applFont, bold, 12, &gRGBBlack);
- ITEView(itsTEDocument, nil, &gZeroVPt, &itsSize,
- sizePage, sizeFillPages, &itsInset, &aStyle,
- teJustLeft, !kWithStyle, true);
- fTEDocument = itsTEDocument;
- fPaletteView = itsTEDocument->fPaletteView;
- fUpdated = true; }
-
- pascal Boolean TTextView::DoIdle(IdlePhase phase)
- { if (!fUpdated)
- { if (Focus()) { DrawContents(); fUpdated = true; };
- return inherited::DoIdle(phase); }
- }
-
- pascal struct TCommand *TTextView::DoKeyCommand
- (short ch, short aKeyCode, EventInfo *info)
- { int aQDColor;
- aQDColor =
- gColorArray[fTEDocument->TextColorCmd()-cBlack];
- ForeColor(aQDColor);
- fUpdated = false;
- ForeColor(blackColor);
- return
- inherited::DoKeyCommand(ch, aKeyCode, info); }
-
- pascal void TTextView::DoSetupMenus()
- { int colorIndex, aColorCmd;
- inherited::DoSetupMenus();
- aColorCmd = fTEDocument->TextColorCmd();
- for (colorIndex = cBlack;
- colorIndex <= cWhite; colorIndex++)
- EnableCheck(colorIndex, TRUE,
- (colorIndex == aColorCmd)); }
-
- pascal struct TCommand *TTextView::DoMenuCommand
- (CmdNumber aCmdNumber)
- { TColorCmd *aColorCmd;
- switch (aCmdNumber)
- { case cBlack: case cBlue: case cGreen:
- case cRed: case cWhite:
- aColorCmd = new TColorCmd;
- FailNIL(aColorCmd);
- aColorCmd->IColorCmd
- (aCmdNumber, fTEDocument, this);
- return aColorCmd;
- default: return inherited::DoMenuCommand
- (aCmdNumber); }
- }
-
- pascal struct TCommand *TTextView::DoMouseCommand
- (Point *theMouse, EventInfo *info, Point *hysteresis)
- { TSketcher *aSketcher;
- if (fPaletteView->fIconSelected == kBox-kBox)
- { aSketcher = new TSketcher;
- FailNIL(aSketcher);
- aSketcher->ISketcher(fTEDocument, this);
- return aSketcher; }
- else return inherited::DoMouseCommand
- (theMouse,info,hysteresis); }
-
- pascal Boolean TTextView::DoSetCursor
- (Point localPoint, RgnHandle cursorRgn)
- { Rect qdExtent;
- GetQDExtent(&qdExtent);
- RectRgn(cursorRgn, &qdExtent);
- if (fPaletteView->fIconSelected == kText-kBox)
- return inherited::DoSetCursor(localPoint, cursorRgn);
- else SetCursor(*GetCursor(crossCursor)); return true; }
-
- pascal void DrawYourself(TBox *aBox, void *link)
- { aBox->DrawShape(); }
-
- pascal void TTextView::Draw(Rect *area)
- { int aQDColor; void *link;
- aQDColor =
- gColorArray[fTEDocument->TextColorCmd()-cBlack];
- ForeColor(aQDColor); // set text color
- inherited::Draw(area); // let TTEView draw the text
- PenNormal();
- ForeColor(kBoxColor); // set box color
- fTEDocument->ForEachShapeDo
- ((DoToObject)DrawYourself,link);
- ForeColor(blackColor); }
-
- #ifdef qDebug
- pascal void TTextView::Fields
- (pascal void (*DoToField) (StringPtr fieldName,
- Ptr fieldAddr, short fieldType, void *link), void *link)
- { DoToField("\pTTextView", nil, bClass, link);
- DoToField("\pfTEDocument", (Ptr) &fTEDocument,
- bObject, link);
- DoToField("\pfPaletteView", (Ptr) &fPaletteView,
- bObject, link);
- DoToField("\pfUpdated", (Ptr) &fUpdated, bBoolean, link);
- inherited::Fields(DoToField, link); }
- #endif
-
- pascal void TColorCmd::IColorCmd (int aCmdNumber,
- TTEDocument *itsDocument, TTextView *itsView)
- { TScroller *aScroller; int oldColorCmd;
- fTextView = itsView;
- fTEDocument = itsDocument;
- aScroller = itsView->GetScroller(true);
- ICommand
- (aCmdNumber, itsDocument, itsView, aScroller);
- oldColorCmd = itsDocument->TextColorCmd();
- fOldColorCmd = oldColorCmd;
- fNewColorCmd = aCmdNumber; }
-
- pascal void TColorCmd::DoIt()
- { fTEDocument->SetTextColorCmd(fNewColorCmd);
- fTextView->ForceRedraw(); }
-
- pascal void TColorCmd::RedoIt() { UndoIt(); }
-
- pascal void TColorCmd::UndoIt()
- { fNewColorCmd = fOldColorCmd;
- fOldColorCmd = fTEDocument->TextColorCmd();
- DoIt(); }
-
- #ifdef qDebug
- pascal void TColorCmd::Fields
- (pascal void (*DoToField) (StringPtr fieldName,
- Ptr fieldAddr, short fieldType, void *link), void *link)
- { DoToField("\pTColorCmd", nil, bClass, link);
- DoToField("\pfTEDocument", (Ptr) &fTEDocument,
- bObject, link);
- DoToField("\pfTextView", (Ptr) &fTextView, bObject, link);
- DoToField("\pfOldColorCmd", (Ptr) &fOldColorCmd,
- bInteger, link);
- DoToField("\pfNewColorCmd", (Ptr) &fNewColorCmd,
- bInteger, link);
- inherited::Fields(DoToField, link); }
- #endif
-
- pascal void TSketcher::ISketcher
- (TTEDocument *itsDocument, TTextView *itsView)
- { TScroller *aScroller;
- aScroller = itsView->GetScroller(true);
- ICommand
- (cDrawBox, itsDocument, itsView, aScroller);
- fTEDocument = itsDocument; fTextView = itsView; }
-
- pascal struct TCommand *TSketcher::TrackMouse
- (TrackPhase aTrackPhase, VPoint *anchorPoint,
- VPoint *previousPoint, VPoint *nextPoint,
- Boolean mouseDidMove)
- { Rect newRect; TBox *aBox;
- if (aTrackPhase == trackRelease)
- { Pt2Rect(fTextView->ViewToQDPt(anchorPoint),
- fTextView->ViewToQDPt(nextPoint), &newRect);
- aBox = new TBox; FailNIL(aBox);
- aBox->IBox(&newRect); fBox = aBox;
- fBoxLocation = newRect; }
- return this; }
-
- pascal void TSketcher::DoIt()
- { fTEDocument->AddShape(fBox);
- fTextView->InvalidRect(&fBoxLocation); }
-
- pascal void TSketcher::RedoIt() { DoIt(); }
-
- pascal void TSketcher::UndoIt()
- { fTEDocument->DeleteShape();
- fTextView->InvalidRect(&fBoxLocation); }
-
- #ifdef qDebug
- pascal void TSketcher::Fields
- (pascal void (*DoToField) (StringPtr fieldName,
- Ptr fieldAddr, short fieldType, void *link), void *link)
- { DoToField("\pTSketcher", nil, bClass, link);
- DoToField("\pfTEDocument", (Ptr) &fTEDocument,
- bObject, link);
- DoToField("\pfTextView", (Ptr) &fTextView, bObject, link);
- DoToField("\pfBox", (Ptr) &fBox, bObject, link);
- DoToField("\pfBoxLocation", (Ptr) &fBoxLocation,
- bRect, link);
- inherited::Fields(DoToField, link); }
- #endif
-
- pascal void TBox::IBox(Rect *itsLocation)
- { fLocation = *itsLocation; }
-
- pascal void TBox::DrawShape()
- { PenSize(4,4);
- FrameRoundRect(&fLocation, 20,20); }
-
- pascal void TBox::NeedDiskSpace(long *data)
- { data = data + sizeof(fLocation); }
-
- pascal void TBox::Read(short aRefNum)
- { long bytes;
- bytes = sizeof(fLocation);
- FailOSErr(
- FSRead(aRefNum, &bytes, (Ptr) &fLocation)); }
-
- pascal void TBox::Write(short aRefNum)
- { long bytes;
- bytes = sizeof(fLocation);
- FailOSErr(
- FSWrite(aRefNum, &bytes, (Ptr) &fLocation));}
-
- #ifdef qDebug
- pascal void TBox::Fields
- (pascal void (*DoToField) (StringPtr fieldName,
- Ptr fieldAddr, short fieldType, void *link), void *link)
- { DoToField("\pTBox", nil, bClass, link);
- DoToField("\pfLocation", (Ptr) &fLocation, bRect, link);
- inherited::Fields(DoToField, link); }
- #endif
-
- TTEApplication *gTEApplication;
- int main()
- { InitToolBox();
- if (ValidateConfiguration(&gConfiguration))
- { InitUMacApp(8); InitUPrinting(); InitUTEView();
- gTEApplication = new TTEApplication;
- FailNIL(gTEApplication);
- gTEApplication->ITEApplication(kFileType);
- gTEApplication->Run(); }
- else StdAlert(phUnsupportedConfiguration);
- return 0; }
-
- Listing 3: TEDemo.r (Resource definitions)
-
- #ifndef __TYPES.R__
- #include "Types.r"
- #endif
-
- #ifndef __SYSTYPES.R__
- #include "SysTypes.r"
- #endif
-
- #ifndef __MacAppTypes__
- #include "MacAppTypes.r"
- #endif
-
- #ifndef __ViewTypes__
- #include "ViewTypes.r"
- #endif
-
- #if qDebug
- include "Debug.rsrc";
- #endif
-
- include "MacApp.rsrc";
- include "Printing.rsrc";
- include "TEOther.rsrc";
- /* DLOG & DITL 1001; ICON 256,257; ICN# 128,129 */
- include "TEDemo" 'CODE';
-
- #define cHelp 1001
- #define cDrawBox 2001
- #define cBlack 5001
- #define cBlue 5002
- #define cGreen 5003
- #define cRed 5004
- #define cWhite 5005
-
- #define kSignature 'JLMT'
- #define kDocFileType 'JL01'
- #define getInfoString
- "©1990 J.Langowski/MacTutor. Translated from MacApp® Pascal."
-
- resource 'WIND' (1001, purgeable) {
- {50, 20, 250, 450}, zoomDocProc, invisible, goAway,
- 0x0, "<<<>>>" };
-
- resource 'DITL' (201, purgeable) {
- /* About box */
- { /* [1] */
- {130, 182, 150, 262},
- Button { enabled, "OK" };
- /* [2] */
- {10, 80, 110, 270},
- StaticText { disabled,
- "Displays text and boxes"
- "\n\nThis program was written "
- "with MacApp® © 1985-1989 Apple Computer, Inc." };
- /* [3] */
- {10, 20, 42, 52},
- Icon { disabled, 1 } } };
-
- resource 'ALRT' (201, purgeable) {
- {90, 100, 250, 412},
- 201,
- { OK, visible, silent; OK, visible, silent;
- OK, visible, silent; OK, visible, silent } };
-
- resource 'cmnu' (1) {
- 1, textMenuProc, 0x7FFFFFFB, enabled, apple,
- { "About TEDemo…",
- noIcon, noKey, noMark, plain, cAboutApp;
- "Help…", noIcon, "H", noMark, plain, cHelp;
- "-", noIcon, noKey, noMark, plain, nocommand } };
-
- resource 'cmnu' (2) {
- 2, textMenuProc, allEnabled, enabled, "File",
- { "New", noIcon, "N", noMark, plain, 10;
- "Open…", noIcon, "O", noMark, plain, 20;
- "-", noIcon, noKey, noMark, plain, nocommand;
- "Close", noIcon, noKey, noMark, plain, 31;
- "Save", noIcon, "S", noMark, plain, 30;
- "Save As…", noIcon, noKey, noMark, plain, 32;
- "Save a Copy In…",
- noIcon, noKey, noMark, plain, 33;
- "-", noIcon, noKey, noMark, plain, nocommand;
- "Page Setup…",
- noIcon, noKey, noMark, plain, 176;
- "Print One", noIcon, "P", noMark, plain, 177;
- "Print…", noIcon, noKey, noMark, plain, 178;
- "-", noIcon, noKey, noMark, plain, nocommand;
- "Quit", noIcon, "Q", noMark, plain, 36 } };
-
- resource 'cmnu' (3) {
- 3, textMenuProc, allEnabled, enabled, "Edit",
- { "Undo", noIcon, "Z", noMark, plain, 101;
- "-", noIcon, noKey, noMark, plain, nocommand;
- "Cut", noIcon, "X", noMark, plain, 103;
- "Copy", noIcon, "C", noMark, plain, 104;
- "Paste", noIcon, "V", noMark, plain, 105;
- "Clear", noIcon, noKey, noMark, plain, 106;
- "-", noIcon, noKey, noMark, plain, nocommand;
- "Show Clipboard",
- noIcon, noKey, noMark, plain, 35 } };
-
- resource 'cmnu' (4) {
- 4, textMenuProc, allEnabled, enabled, "TextColor",
- { "Black", noIcon, noKey, noMark, plain, cBlack;
- "Blue", noIcon, "B", noMark, plain, cBlue;
- "Green", noIcon, "G", noMark, plain, cGreen;
- "Red", noIcon, "R", noMark, plain, cRed;
- "White", noIcon, noKey, noMark, outline, cWhite }
- };
-
- resource 'cmnu' (128) {
- 128,textMenuProc,allEnabled,enabled,"Buzzwords",
- { "Page Setup Change",
- noIcon, noKey, noMark, plain, cChangePrinterStyle;
- "Typing", noIcon, noKey, noMark, plain, cTyping;
- "Drawing",
- noIcon, noKey, noMark, plain, cDrawBox } };
-
- resource 'MBAR' (128) { {1; 2; 3; 4} };
-
- resource 'mctb' (128) {
- { /* Blue */
- 4, 2,
- { 0x0000, 0x0000, 0xFFFF;
- 0x0000, 0x0000, 0xFFFF;
- 0x0000, 0x0000, 0xFFFF;
- 0xFFFF, 0xFFFF, 0xFFFF };
- /* Green */
- 4, 3,
- { 0x0000, 0xDB00, 0x0000; 0x0000, 0xDB00, 0x0000; 0x0000, 0xDB00, 0x0000; 0xFFFF, 0xFFFF, 0xFFFF };
- /* Red */
- 4, 4,
- { 0xDB00, 0x0000, 0x0000; 0xDB00, 0x0000, 0x0000; 0xDB00, 0x0000, 0x0000; 0xFFFF, 0xFFFF, 0xFFFF } } };
-
- resource 'SIZE' (-1) {
- saveScreen, acceptSuspendResumeEvents,
- enableOptionSwitch, canBackground,
- MultiFinderAware, backgroundAndForeground,
- dontGetFrontClicks, ignoreChildDiedEvents,
- is32BitCompatible, reserved, reserved, reserved,
- reserved, reserved, reserved, reserved,
- #if qDebug
- 640 * 1024, 512 * 1024
- #else
- 240 * 1024, 220 * 1024
- #endif
- };
-
- resource 'seg!' (256, purgeable) {
- { "GClose"; "GDoCommand"; "GNonRes";
- "GFile"; "GOpen"; "GSelCommand"; } };
-
- resource 'mem!' (256, purgeable) {
- 30 * 1024, /* Add to temporary reserve */
- 0, /* Add to permanent reserve */
- 0 /* Add to stack space */
- };
-
- /* Bundle */
-
- type kSignature as 'STR ';
-
- resource kSignature (0) { getInfoString; };
- resource 'FREF' (128) { 'APPL', 0, "TEDemo };
- resource 'FREF' (129) { kDocFileType, 1, "TEDemo" };
- resource 'BNDL' (128) { kSignature, 0,
- { 'ICN#', { 0, 128; 1, 129 };
- 'FREF', { 0, 128; 1, 129 } } };
-
- RESOURCE 'vers' (2,
- #if qNames
- "Package Version",
- #endif
- purgeable) { 0x02, 0x00, beta, 0x06, verUs, "2.0ß9",
- "MacApp® 2.0ß9, ©Apple Computer, Inc. 1989" };
- RESOURCE 'vers' (1,
- #if qNames
- "File Version",
- #endif
- purgeable) { 0x01,0x00,beta,0x05,verUs,"TEDemo",
- "v 0.0, ©JL/MacTutor 1990" };
-
- /* debug window */
- resource 'dbug' (kDebugParamsID,
- #if qNames
- "Debug",
- #endif
- purgeable) {
- {350, 4, 474, 636}, /* Bounds rect */
- 1, /* font rsrc ID (normal = monaco) */
- 9, /* font size (normal = 9) */
- 100, /* Number of lines */
- 100, /* Width of lines in characters */
- true, /* open initially */
- "Jörg's Debug Window" /* Window title */ };
-
- Listing 4: TEDemo.MAMake (MacApp Make file)
-
- #----------------------------------------------------------------------------AppName = TEDemo
- #----------------------------------------------------------------------------# List resource files that the Rez file includes
- OtherRsrcFiles = ∂
- "{MAObj}Printing.rsrc" ∂
- "TEOther.rsrc"
-